package main

import . "local/algorithm/util"

/**
给你一个链表的头节点 head 和一个整数 val ，请你删除链表中所有满足 Node.val == val 的节点，并返回 新的头节点 。
*/

func main() {
	l := GenerateLinkedList([]int{1, 2, 6, 3, 4, 5, 6})
	removeElements(l, 6)
	PrintLinkedList(l)
}

func removeElements(head *ListNode, val int) *ListNode {
	dn := &ListNode{Next: head}
	prev := dn
	current := head
	for current != nil {
		if current.Val == val {
			current = current.Next
			prev.Next = current // 这一步是删除节点，同时删除时prev不应该移动
		} else {
			prev = current
			current = current.Next
		}
	}
	return dn.Next
}
